import { getMapStyleMgr, changeMapStyleMgr, removeMapMgr, customMapStyleMgr, initMapDragZoomMgr } from "./tool";
import { defaultCoordinates, defaultZoom, TianDiTuSatelliteURL } from "../../mapbox_config/mapConfigManager";
import { setupCoordinateDisplay } from "../../mapbox_tool/infoPrompt/index";
import { loadAddIcon, loadSprite } from "../../main/index.js";
// 天气核心精灵图json文件
import WeatherJson from "@/assets/sprite/Weather.json";
let map: any = null; // 定义一个全局变量用于存储地图实例
// 导出一个名为initMap的函数，该函数接受一个参数mapContainer，用于初始化地图
export const initMap = (mapContainer: string) => {
  if (map) {
    map.remove();
    map = null;
  }
  // 定义默认的地图配置项
  const defaultOptions = {
    // 地图容器
    container: mapContainer,
    // 地图样式
    style: getMapStyleMgr(TianDiTuSatelliteURL),
    // 地图中心点
    center: defaultCoordinates,
    // 地图缩放级别
    zoom: defaultZoom,
    // 是否开启抗锯齿
    antialias: true,
    // 是否保留绘图缓冲区
    preserveDrawingBuffer: true,
    // 启用拖拽旋转
    dragRotate: true,
    // 启用拖拽平移,
    dragPan: true,
    // 默认为二维平面
    projection: "mercator"
  };
  // 创建地图实例
  map = new mapboxgl.Map(defaultOptions);
  
  if (!map) {
    return;
  }
  map.on("load", () => {
    // 设置地球的大气效果
    map.setFog({
      "horizon-blend": 0.7, // 地平线混合程度
      color: "rgba(186, 210, 235, 1)", // 雾的颜色
      "high-color": "rgba(36, 92, 223, 0.5)", // 高空颜色
      "space-color": "rgba(11, 11, 25, 1)", // 太空颜色
      "star-intensity": 0.6 // 星空亮度
    });
    setupCoordinateDisplay(map);
    loadMapResource(map);
    // 初始化鼠标相关事件
    initMapDragZoomMgr(map);
  });
  return map;
};

// 加载初始化资源
export const loadMapResource = async (map: any) => {
  if (!map) {
    console.error("地图未初始化");
    return;
  }
  // 加载图源
  // 作业点聚合
  await loadAddIcon(map, "position", new URL("@/assets/images/position-removebg-preview.png", import.meta.url).href, () => {
    console.log("作业点聚合加载完成");
  });
  // 作业点
  await loadAddIcon(map, "pointIcon", new URL("@/assets/images/point.png", import.meta.url).href, () => {
    console.log("作业点图标加载完成");
  });
  // 天气图标1 精灵图
  await loadSprite(map, new URL("@/assets/sprite/Weather.png", import.meta.url).href, WeatherJson, { offsetY: 10 });
  // 天气图标2 普通图片
  await initWeatherIcon();
};

// 初始化天气图标
const initWeatherIcon = async () => {
  const weatherImages = import.meta.glob("@/assets/images/weatherImage/*.png", { eager: true });
  // 获取所有图片名称（不含扩展名）
  Object.keys(weatherImages).map(async key => {
    // 提取文件名（例如：'sunny' 从 './sunny.png' 中）
    const fileName = key.match(/\/([^/]+)\.\w+$/)?.[1];
    if (fileName) {
      await loadAddIcon(map, fileName, key);
    }
  });
};

// 改变地图样式
export const changeMapStyle = (mapStyle: string) => {
  if (!map) {
    console.error("地图未初始化");
    return;
  }
  changeMapStyleMgr(map, mapStyle);
};

// 删除地图
export const removeMap = () => {
  if (!map) {
    console.error("地图未初始化");
    return;
  }
  removeMapMgr(map);
};

// 导出一个函数，用于获取地图
export const getMap = () => {
  if (!map) {
    console.error("地图未初始化");
    return;
  }
  // 返回地图
  return map;
};

// 导出一个函数，用于自定义地图样式
export const customMapStyle = (mapStyle: string) => {
  if (!map) {
    console.error("地图未初始化");
    return;
  }
  customMapStyleMgr(map, mapStyle);
};

export { terrainMgrAdd, removeTerrainMgr } from "./tool.js"
